
/*!
 ***************************************************************************
 * \file
 *    biariencode.h
 *
 * \brief
 *    Headerfile for binary arithmetic encoding routines
 *
 * \author
 *    Detlev Marpe,
 *    Gabi Blaettermann
 *    Copyright (C) 2000 HEINRICH HERTZ INSTITUTE All Rights Reserved.
 *
 * \date
 *    21. Oct 2000
 **************************************************************************
 */


#ifndef _BIARIENCOD_H_
#define _BIARIENCOD_H_



/************************************************************************
 * D e f i n i t i o n s
 ***********************************************************************
 */

// some definitions to increase the readability of the source code

#define Elow            (eep->Elow)
#define Erange          (eep->Erange)
#define Ebits_to_follow (eep->Ebits_to_follow)
#define Ebuffer         (eep->Ebuffer)
#define Ebits_to_go     (eep->Ebits_to_go)
#define Ecodestrm       (eep->Ecodestrm)
#define Ecodestrm_len   (eep->Ecodestrm_len)
#define Ecodestrm_laststartcode   (eep->Ecodestrm_laststartcode)
#define B_BITS     10 // Number of bits to represent the whole coding interval
#define ONE                              (1 << B_BITS)
#define HALF                     (1 << (B_BITS-1))
#define QUARTER    (1 << (B_BITS-2))

/* Range table for LPS */ 
const byte rLPS_table_64x4[64][4]=
{
        { 128, 176, 208, 240},
        { 128, 167, 197, 227},
        { 128, 158, 187, 216},
        { 123, 150, 178, 205},
        { 116, 142, 169, 195},
        { 111, 135, 160, 185},
        { 105, 128, 152, 175},
        { 100, 122, 144, 166},
        {  95, 116, 137, 158},
        {  90, 110, 130, 150},
        {  85, 104, 123, 142},
        {  81,  99, 117, 135},
        {  77,  94, 111, 128},
        {  73,  89, 105, 122},
        {  69,  85, 100, 116},
        {  66,  80,  95, 110},
        {  62,  76,  90, 104},
        {  59,  72,  86,  99},
        {  56,  69,  81,  94},
        {  53,  65,  77,  89},
        {  51,  62,  73,  85},
        {  48,  59,  69,  80},
        {  46,  56,  66,  76},
        {  43,  53,  63,  72},
        {  41,  50,  59,  69},
        {  39,  48,  56,  65},
        {  37,  45,  54,  62},
        {  35,  43,  51,  59},
        {  33,  41,  48,  56},
        {  32,  39,  46,  53},
        {  30,  37,  43,  50},
        {  29,  35,  41,  48},
        {  27,  33,  39,  45},
        {  26,  31,  37,  43},
        {  24,  30,  35,  41},
        {  23,  28,  33,  39},
        {  22,  27,  32,  37},
        {  21,  26,  30,  35},
        {  20,  24,  29,  33},
        {  19,  23,  27,  31},
        {  18,  22,  26,  30},
        {  17,  21,  25,  28},
        {  16,  20,  23,  27},
        {  15,  19,  22,  25},
        {  14,  18,  21,  24},
        {  14,  17,  20,  23},
        {  13,  16,  19,  22},
        {  12,  15,  18,  21},
        {  12,  14,  17,  20},
        {  11,  14,  16,  19},
        {  11,  13,  15,  18},
        {  10,  12,  15,  17},
        {  10,  12,  14,  16},
        {   9,  11,  13,  15},
        {   9,  11,  12,  14},
        {   8,  10,  12,  14},
        {   8,   9,  11,  13},
        {   7,   9,  11,  12},
        {   7,   9,  10,  12},
        {   7,   8,  10,  11},
        {   6,   8,   9,  11},
        {   6,   7,   9,  10},
        {   6,   7,   8,   9},
        {   2,   2,   2,   2}
};


const unsigned short AC_next_state_MPS_64[64] =    
{
                1,2,3,4,5,6,7,8,9,10,
                11,12,13,14,15,16,17,18,19,20,
                21,22,23,24,25,26,27,28,29,30,
                31,32,33,34,35,36,37,38,39,40,
                41,42,43,44,45,46,47,48,49,50,
                51,52,53,54,55,56,57,58,59,60,
                61,62,62,63
};      

const unsigned short AC_next_state_LPS_64[64] =    
{
                 0, 0, 1, 2, 2, 4, 4, 5, 6, 7,
                 8, 9, 9,11,11,12,13,13,15,15, 
                 16,16,18,18,19,19,21,21,22,22,
                 23,24,24,25,26,26,27,27,28,29,
                 29,30,30,30,31,32,32,33,33,33,
                 34,34,35,35,35,36,36,36,37,37, 
                 37,38,38,63 
};


#endif  // BIARIENCOD_H

